home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / sndhdr.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  6KB  |  207 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __all__ = [
  5.     'what',
  6.     'whathdr']
  7.  
  8. def what(filename):
  9.     res = whathdr(filename)
  10.     return res
  11.  
  12.  
  13. def whathdr(filename):
  14.     f = open(filename, 'rb')
  15.     h = f.read(512)
  16.     for tf in tests:
  17.         res = tf(h, f)
  18.         if res:
  19.             return res
  20.             continue
  21.     
  22.  
  23. tests = []
  24.  
  25. def test_aifc(h, f):
  26.     import aifc
  27.     if h[:4] != 'FORM':
  28.         return None
  29.     
  30.     if h[8:12] == 'AIFC':
  31.         fmt = 'aifc'
  32.     elif h[8:12] == 'AIFF':
  33.         fmt = 'aiff'
  34.     else:
  35.         return None
  36.     f.seek(0)
  37.     
  38.     try:
  39.         a = aifc.openfp(f, 'r')
  40.     except (EOFError, aifc.Error):
  41.         return None
  42.  
  43.     return (fmt, a.getframerate(), a.getnchannels(), a.getnframes(), 8 * a.getsampwidth())
  44.  
  45. tests.append(test_aifc)
  46.  
  47. def test_au(h, f):
  48.     if h[:4] == '.snd':
  49.         f = get_long_be
  50.     elif h[:4] in ('\x00ds.', 'dns.'):
  51.         f = get_long_le
  52.     else:
  53.         return None
  54.     type = 'au'
  55.     hdr_size = f(h[4:8])
  56.     data_size = f(h[8:12])
  57.     encoding = f(h[12:16])
  58.     rate = f(h[16:20])
  59.     nchannels = f(h[20:24])
  60.     sample_size = 1
  61.     if encoding == 1:
  62.         sample_bits = 'U'
  63.     elif encoding == 2:
  64.         sample_bits = 8
  65.     elif encoding == 3:
  66.         sample_bits = 16
  67.         sample_size = 2
  68.     else:
  69.         sample_bits = '?'
  70.     frame_size = sample_size * nchannels
  71.     return (type, rate, nchannels, data_size / frame_size, sample_bits)
  72.  
  73. tests.append(test_au)
  74.  
  75. def test_hcom(h, f):
  76.     if h[65:69] != 'FSSD' or h[128:132] != 'HCOM':
  77.         return None
  78.     
  79.     divisor = get_long_be(h[144:148])
  80.     return ('hcom', 22050 / divisor, 1, -1, 8)
  81.  
  82. tests.append(test_hcom)
  83.  
  84. def test_voc(h, f):
  85.     if h[:20] != 'Creative Voice File\x1a':
  86.         return None
  87.     
  88.     sbseek = get_short_le(h[20:22])
  89.     rate = 0
  90.     if sbseek <= sbseek:
  91.         pass
  92.     elif sbseek < 500 and h[sbseek] == '\x01':
  93.         ratecode = ord(h[sbseek + 4])
  94.         rate = int(1e+06 / (256 - ratecode))
  95.     
  96.     return ('voc', rate, 1, -1, 8)
  97.  
  98. tests.append(test_voc)
  99.  
  100. def test_wav(h, f):
  101.     if h[:4] != 'RIFF' and h[8:12] != 'WAVE' or h[12:16] != 'fmt ':
  102.         return None
  103.     
  104.     style = get_short_le(h[20:22])
  105.     nchannels = get_short_le(h[22:24])
  106.     rate = get_long_le(h[24:28])
  107.     sample_bits = get_short_le(h[34:36])
  108.     return ('wav', rate, nchannels, -1, sample_bits)
  109.  
  110. tests.append(test_wav)
  111.  
  112. def test_8svx(h, f):
  113.     if h[:4] != 'FORM' or h[8:12] != '8SVX':
  114.         return None
  115.     
  116.     return ('8svx', 0, 1, 0, 8)
  117.  
  118. tests.append(test_8svx)
  119.  
  120. def test_sndt(h, f):
  121.     if h[:5] == 'SOUND':
  122.         nsamples = get_long_le(h[8:12])
  123.         rate = get_short_le(h[20:22])
  124.         return ('sndt', rate, 1, nsamples, 8)
  125.     
  126.  
  127. tests.append(test_sndt)
  128.  
  129. def test_sndr(h, f):
  130.     if h[:2] == '\x00\x00':
  131.         rate = get_short_le(h[2:4])
  132.         if rate <= rate:
  133.             pass
  134.         elif rate <= 25000:
  135.             return ('sndr', rate, 1, -1, 8)
  136.         
  137.     
  138.  
  139. tests.append(test_sndr)
  140.  
  141. def get_long_be(s):
  142.     return ord(s[0]) << 24 | ord(s[1]) << 16 | ord(s[2]) << 8 | ord(s[3])
  143.  
  144.  
  145. def get_long_le(s):
  146.     return ord(s[3]) << 24 | ord(s[2]) << 16 | ord(s[1]) << 8 | ord(s[0])
  147.  
  148.  
  149. def get_short_be(s):
  150.     return ord(s[0]) << 8 | ord(s[1])
  151.  
  152.  
  153. def get_short_le(s):
  154.     return ord(s[1]) << 8 | ord(s[0])
  155.  
  156.  
  157. def test():
  158.     import sys as sys
  159.     recursive = 0
  160.     if sys.argv[1:] and sys.argv[1] == '-r':
  161.         del sys.argv[1:2]
  162.         recursive = 1
  163.     
  164.     
  165.     try:
  166.         if sys.argv[1:]:
  167.             testall(sys.argv[1:], recursive, 1)
  168.         else:
  169.             testall([
  170.                 '.'], recursive, 1)
  171.     except KeyboardInterrupt:
  172.         sys.stderr.write('\n[Interrupted]\n')
  173.         sys.exit(1)
  174.  
  175.  
  176.  
  177. def testall(list, recursive, toplevel):
  178.     import sys
  179.     import os as os
  180.     for filename in list:
  181.         if os.path.isdir(filename):
  182.             print filename + '/:',
  183.             if recursive or toplevel:
  184.                 print 'recursing down:'
  185.                 import glob as glob
  186.                 names = glob.glob(os.path.join(filename, '*'))
  187.                 testall(names, recursive, 0)
  188.             else:
  189.                 print '*** directory (use -r) ***'
  190.         toplevel
  191.         print filename + ':',
  192.         sys.stdout.flush()
  193.         
  194.         try:
  195.             print what(filename)
  196.         continue
  197.         except IOError:
  198.             print '*** not found ***'
  199.             continue
  200.         
  201.  
  202.     
  203.  
  204. if __name__ == '__main__':
  205.     test()
  206.  
  207.